#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
typedef long long ll;
using namespace std;
const ll mod=7;
int r;
int add(vector<int>&D, int b)
{

    for (int i = D.size()-1; i>=0; i--)
    {
        r = r * 10 + D[i];
        r %= b;
    }
	
    return r;

}
void qmi(ll c[][2],ll a[][2],ll b[][2])
{
	ll temp[2][2]={0};
	for(int i=0;i<2;i++)
	{
		for(int j=0;j<2;j++)
		{
			//temp[i][j]=((a[i][0] %mod)*(b[0][j] % mod) % mod + (a[i][1] % mod)*(b[1][j] % mod)) % mod;
			temp[i][j]=(a[i][0]*b[0][j]+a[i][1]*b[1][j])%mod;
		}
	}
	memcpy(c,temp,sizeof(temp));
}
int main()
{
	
    vector<int> D;
    string a;
    long long b = 2016;
    cin >> a ;
    r=0;
    for (int i = a.size() - 1; i >= 0; i--) D.push_back(a[i] - '0');
    r = 0;
    add(D, b);
	ll F[2][2]={1,1,
            0,0};
    ll A[2][2]={1,1,
                1,0};
	
	for(int i=0;i<2;i++)
	{
		for(int j=0;j<2;j++)
		{
			cin>>F[i][j];
			A[i][j]=F[i][j];
		}
	}
	while(r)
	{
		if(r&1) 
		{
		    qmi(F,F,A);
	    }
		qmi(A,A,A);
		r>>=1;
	}

	for(int i=0;i<2;i++)
	{
		for(int j=0;j<2;j++)
		{
			cout<<F[i][j]<<' ';
		}
		cout<<endl;
	}

	return 0;
}

